package logic;

import dao.PacienteDAO;
import dto.PacienteDTO;
import java.sql.SQLException;
import java.time.LocalDate;
import java.util.ArrayList;

/**
 *
 * @author the_rub
 */
public class Paciente {

  private int id;
  private String nombre;
  private String apellido;
  private int dni;
  private LocalDate fechaNac;
  private int idObraSocial;
  private int idPlanObraSocial;
  private int nAfiliado;
  private String direccion;
  private String telLinea;
  private String celular;
  private String email;
  private String contactoNombre;
  private String contactoApellido;
  private String contactoTelefono;

  public Paciente(int id, String nombre, String apellido, int dni, LocalDate fechaNac, int idObraSocial, int idPlanObraSocial, int nAfiliado, String direccion, String telLinea, String celular, String email, String contactoNombre, String contactoApellido, String contactoTelefono) {
    this.id = id;
    this.nombre = nombre;
    this.apellido = apellido;
    this.dni = dni;
    this.fechaNac = fechaNac;
    this.idObraSocial = idObraSocial;
    this.idPlanObraSocial = idPlanObraSocial;
    this.nAfiliado = nAfiliado;
    this.direccion = direccion;
    this.telLinea = telLinea;
    this.celular = celular;
    this.email = email;
    this.contactoNombre = contactoNombre;
    this.contactoApellido = contactoApellido;
    this.contactoTelefono = contactoTelefono;
  }

  public Paciente(PacienteDTO dto){
    this.id = dto.getId();
    this.nombre = dto.getNombre();
    this.apellido = dto.getApellido();
    this.dni = dto.getDni();
    this.fechaNac = dto.getFechaNac();
    this.idObraSocial = dto.getIdObraSocial();
    this.idPlanObraSocial = dto.getIdPlanObraSocial();
    this.nAfiliado = dto.getNAfiliado();
    this.direccion = dto.getDireccion();
    this.telLinea = dto.getTelLinea();
    this.celular = dto.getCelular();
    this.email = dto.getEmail();
    this.contactoNombre = dto.getContactoNombre();
    this.contactoApellido = dto.getContactoApellido();
    this.contactoTelefono = dto.getContactoTelefono();
  }

  public void SaveNew() throws SQLException {
    PacienteDTO dto = new PacienteDTO(-1, nombre, apellido, dni, fechaNac, idObraSocial, idPlanObraSocial, nAfiliado, direccion, telLinea, celular, email, contactoNombre, contactoApellido, contactoTelefono);
    PacienteDAO dao = PacienteDAO.createDAO();
    id = dao.SaveNew(dto);
  }

  public void Update() throws SQLException {
    PacienteDTO dto = new PacienteDTO(id, nombre, apellido, dni, fechaNac, idObraSocial, idPlanObraSocial, nAfiliado, direccion, telLinea, celular, email, contactoNombre, contactoApellido, contactoTelefono);
    PacienteDAO dao = PacienteDAO.createDAO();
    dao.Update(dto);
  }

  public static ArrayList<PacienteDTO> All() throws SQLException {
    PacienteDAO dao = PacienteDAO.createDAO();
    return dao.All();
  }

  public static PacienteDTO SearchByID(int id) throws SQLException {
    PacienteDAO dao = PacienteDAO.createDAO();
    return dao.PacienteDTO(id);
  }

  public static ArrayList<PacienteDTO> Search(String item) throws SQLException {
    ArrayList<PacienteDTO> dtos = null;
    int dni;
    try { // item's a dni
      dni = Integer.parseInt(item);
      dtos = SearchByDNI(dni);
    } catch (NumberFormatException err) { // item's a name
      dtos = SearchByNombreApellido(item);
    }
    return dtos;
  }

  public static ArrayList<PacienteDTO> SearchByNombreApellido(String name) throws SQLException {
    PacienteDAO dao = PacienteDAO.createDAO();
    return dao.SearchByNombreApellido(name);
  }

  public static ArrayList<PacienteDTO> SearchByDNI(int dni) throws SQLException {
    PacienteDAO dao = PacienteDAO.createDAO();
    return dao.SearchByDNI(dni);
  }

  public int getId() {
    return id;
  }

  public String getNombre() {
    return nombre;
  }

  public String getApellido() {
    return apellido;
  }

  public int getDni() {
    return dni;
  }

  public LocalDate getFechaNac() {
    return fechaNac;
  }

  public int getIdObraSocial() {
    return idObraSocial;
  }

  public int getIdPlanObraSocial() {
    return idPlanObraSocial;
  }

  public int getNAfiliado() {
    return nAfiliado;
  }

  public String getDireccion() {
    return direccion;
  }

  public String getTelLinea() {
    return telLinea;
  }

  public String getCelular() {
    return celular;
  }

  public String getEmail() {
    return email;
  }

  public String getContactoNombre() {
    return contactoNombre;
  }

  public String getContactoApellido() {
    return contactoApellido;
  }

  public String getContactoTelefono() {
    return contactoTelefono;
  }
  
}
